package magazzino.web.ricercaOrdine;

import java.util.Collection;
import javax.ejb.EJB;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import magazzino.web.NameAttributes;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import org.apache.struts.actions.EventDispatchAction;
import to.pm.acquisti.bi.GestioneFornitoreBusiness;
import to.pm.acquisti.bi.GestioneOrdineBusiness;
import to.pm.ejb.EjbName;
import to.pm.entity.acquisti.Fornitore;
import to.pm.entity.acquisti.OrdineEsterno;

import fr.improve.struts.taglib.layout.datagrid.Datagrid;
import java.util.List;
import to.pm.entity.catalogo.Prodotto;


public class RicercaOrdineAction extends EventDispatchAction  {
    


    @EJB
    private GestioneFornitoreBusiness fornitore;
    
    @EJB(mappedName=EjbName.OrdineEsternoBean)
    private GestioneOrdineBusiness ordine;

    private void caricaFornitori( RicercaOrdineForm  form) {
        Collection<Fornitore> fornitori = fornitore.findAll();
        form.setFornitori(fornitori);
    }

    private void caricaOrdini( RicercaOrdineForm  form,Fornitore f) {
        form.setOrdini(fornitore.getOrdiniInRicezione(f)) ;

        //Prova per Struts-Layout

		// Get an object list.
		List<OrdineEsterno> aList = fornitore.getOrdiniInRicezione(f);

		// Create a datagrid.
		Datagrid lc_datagrid = Datagrid.getInstance();

		// Set the bean class for new objects. We suppose SomeBean is the class of the object in the List aList.
		lc_datagrid.setDataClass(OrdineEsterno.class);

		// Set the data
		lc_datagrid.setData(aList);

		// Initialize the form
		form.setDatagrid(lc_datagrid);
    }

    public ActionForward selezionaFornitore(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        log.info("ricercaOrdine:selezionaFornitore");
        RicercaOrdineForm myForm =(RicercaOrdineForm) form;

        caricaFornitori(myForm);

        Fornitore f = fornitore.findById(myForm.getIdFornitore());
        //nel caso nessun fornitore sia stato selezionato...

        if (null!=f) {

            log.info("Fornitore selezioato: "+f);
            //se si seleziona un diverso fornitore si perde l'ordine
            //eventualmente gia' selezionato precedentemente
            if (null!=request.getSession().getAttribute(NameAttributes.GESTIONERICEZIONE_FORNITORESELEZIONATO.name())) {
                Fornitore fOld = (Fornitore) request.getSession().getAttribute(NameAttributes.GESTIONERICEZIONE_FORNITORESELEZIONATO.name());
                if (fOld.getId() != f.getId()) {
                                request.getSession().removeAttribute(NameAttributes.GESTIONERICEZIONE_ORDINESELEZIONATO.name());
            }}

            request.getSession().setAttribute(NameAttributes.GESTIONERICEZIONE_FORNITORESELEZIONATO.name(),f);
            caricaOrdini(myForm, f);
        }

        return mapping.getInputForward();
    }

    
    public ActionForward selezionaOrdine(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        log.info("ricercaOrdine:selezionaOrdine");

        RicercaOrdineForm myForm =(RicercaOrdineForm) form;
        
        OrdineEsterno o = new OrdineEsterno();
        o.setId(myForm.getIdOrdine());
        o = ordine.loadOrdineEsterno(o);

        //TODO se sessione e' scaduta allora lui crea una nuova sessione, senza fornitore selezionato! ...
        request.getSession().setAttribute(NameAttributes.GESTIONERICEZIONE_ORDINESELEZIONATO.name(),o);

        return mapping.getInputForward();
    }
}